If the item is already in the right place, don't move it. Bug #157670.
authorSøren Sandmann <sandmann@redhat.com>
Mon, 29 Nov 2004 23:08:24 +0000 (23:08 +0000)
committerSøren Sandmann Pedersen <ssp@src.gnome.org>
Mon, 29 Nov 2004 23:08:24 +0000 (23:08 +0000)
Mon Nov 29 17:51:51 2004  Søren Sandmann  <sandmann@redhat.com>

       * gtk/gtksequence.c (_gtk_sequence_sort_changed): If the item is
       already in the right place, don't move it. Bug #157670.

       * gtk/gtksequence.c (already_in_place): New function

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtksequence.c

index b429e2d43c7dd2a149133600514942dc081f1ed4..de120ef2f7292408837ae59b1800bc65451abe2f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon Nov 29 17:51:51 2004  Søren Sandmann  <sandmann@redhat.com>
+
+       * gtk/gtksequence.c (_gtk_sequence_sort_changed): If the item is
+       already in the right place, don't move it. Bug #157670.
+       
+       * gtk/gtksequence.c (already_in_place): New function
+
 Mon Nov 29 17:28:53 2004  Søren Sandmann  <sandmann@redhat.com>
 
        * gtk/gtksequence.c (_gtk_sequence_sort): Take nodes in reverse
index b429e2d43c7dd2a149133600514942dc081f1ed4..de120ef2f7292408837ae59b1800bc65451abe2f 100644 (file)
@@ -1,3 +1,10 @@
+Mon Nov 29 17:51:51 2004  Søren Sandmann  <sandmann@redhat.com>
+
+       * gtk/gtksequence.c (_gtk_sequence_sort_changed): If the item is
+       already in the right place, don't move it. Bug #157670.
+       
+       * gtk/gtksequence.c (already_in_place): New function
+
 Mon Nov 29 17:28:53 2004  Søren Sandmann  <sandmann@redhat.com>
 
        * gtk/gtksequence.c (_gtk_sequence_sort): Take nodes in reverse
index b429e2d43c7dd2a149133600514942dc081f1ed4..de120ef2f7292408837ae59b1800bc65451abe2f 100644 (file)
@@ -1,3 +1,10 @@
+Mon Nov 29 17:51:51 2004  Søren Sandmann  <sandmann@redhat.com>
+
+       * gtk/gtksequence.c (_gtk_sequence_sort_changed): If the item is
+       already in the right place, don't move it. Bug #157670.
+       
+       * gtk/gtksequence.c (already_in_place): New function
+
 Mon Nov 29 17:28:53 2004  Søren Sandmann  <sandmann@redhat.com>
 
        * gtk/gtksequence.c (_gtk_sequence_sort): Take nodes in reverse
index b429e2d43c7dd2a149133600514942dc081f1ed4..de120ef2f7292408837ae59b1800bc65451abe2f 100644 (file)
@@ -1,3 +1,10 @@
+Mon Nov 29 17:51:51 2004  Søren Sandmann  <sandmann@redhat.com>
+
+       * gtk/gtksequence.c (_gtk_sequence_sort_changed): If the item is
+       already in the right place, don't move it. Bug #157670.
+       
+       * gtk/gtksequence.c (already_in_place): New function
+
 Mon Nov 29 17:28:53 2004  Søren Sandmann  <sandmann@redhat.com>
 
        * gtk/gtksequence.c (_gtk_sequence_sort): Take nodes in reverse
index fcfc9b088e029a3910da873ab265b35b105dec68..8c81ac9fc67b90e2a32103a82b3811b265f26702 100644 (file)
@@ -448,6 +448,25 @@ _gtk_sequence_ptr_move           (GtkSequencePtr             ptr,
   return _gtk_sequence_node_find_by_pos (ptr, new_pos);
 }
 
+static gboolean
+already_in_place (GtkSequencePtr       ptr,
+                 GCompareDataFunc      cmp_func,
+                 gpointer              data)
+{
+  SortInfo info;
+
+  info.cmp = cmp_func;
+  info.data = data;
+
+  if (node_compare (_gtk_sequence_node_prev (ptr), ptr, &info) <= 0    &&
+      node_compare (_gtk_sequence_node_next (ptr), ptr, &info) >= 0)
+  {
+      return TRUE;
+  }
+
+  return FALSE;
+}
+      
 void
 _gtk_sequence_sort_changed  (GtkSequencePtr         ptr,
                             GCompareDataFunc        cmp_func,
@@ -455,8 +474,12 @@ _gtk_sequence_sort_changed  (GtkSequencePtr             ptr,
   
 {
   GtkSequence *seq;
-  
+
+  g_return_if_fail (ptr != NULL);
   g_return_if_fail (!ptr->is_end);
+
+  if (already_in_place (ptr, cmp_func, cmp_data))
+      return;
   
   seq = _gtk_sequence_node_get_sequence (ptr);
   _gtk_sequence_unlink (seq, ptr);